インターネットから直接Amazon RDS in VPCにアクセスできない時の解決方法
社内のデータベース管理アプリから直接アクセスしたい
システム開発時やデータベースのメンテナンス時に、ローカルPCに入っている各種管理アプリを使って直接データベースにアクセスしたいことがあります。そんなときにどうやってアクセスするのかちょっとハマったので備忘録として残したいと思います。
EC2-VPC
長らくAWSの代表的なサービスであったEC2がデフォルトでしたが、今週のAWSの発表によって、仮想ネットワーク上にサーバを立てるVPCがデフォルト指定となりました。これに伴いまして、社内では実際に動作を確認してみました。
Amazon RDSはインターネットから見えるのか?
Amazon RDSはインターネットから見えるのか?これをまずはしっかり確認したいと思います。ちなみに、昔からあるEC2はEC2-Classicとなり、新しいのはEC2-VPCとなりました。
- EC2-ClassicタイプのRDS:DNS名からパブリックなグローバルIPが返ってくる。アクセスOK
- EC2-VPCタイプのRDS:DNS名からプライベートなローカルIPが返ってくる。アクセスNG
- EC2-VPCタイプのRDS(New):VPCの設定で名前解決とホスト名が有効になっていれば、DNS名からパブリックなグローバルIPが返ってくる。アクセスOK
Amazon VPCの設定手順
既にアカウントをお持ちの方で、VPCを作成済みの場合、VPCの詳細を見てみてください。見慣れないキーワードとチェックボックスが並んでいます。
初期状態では片方しかチェックされていません。これを両方ともチェックONにしましょう。
RouteTableのInternet GatewayとSecurityGroup
EC2-VPC内のRDSインスタンスに直接アクセスするためには、以下の2つを行って下さい。
- ルーティングテーブルをインターネット接続許可とする。
- DBサブネットグループを作成してルーティングに参加させる。
- セキュリティグループを作成してインターネットからアクセスできるようにポートを開ける。
Amazon RDSでデータベースを起動する
RDSで新しいインスタンスを起動します。情報を順番に入力して進めると、Publicly Accessibleの項目が出てきます。これをYESにしてください。起動済みのRDSインスタンスはNOになっているはずです。
接続確認
無事にインスタンス起動してくれれば後はアクセスしてみるだけです。まずは、デフォルト状態でインターネット接続を許可していないサーバをnslookupしてみましょう。
$ nslookup > mydb1.azjhhogeqtzieo.ap-northeast-1.rds.amazonaws.com Server: 192.168.0.3 Address: 192.168.0.3#53 Non-authoritative answer: Name: mydb1.azjhhogeqtzieo.ap-northeast-1.rds.amazonaws.com Address: 10.0.3.23
確かにローカルのIPが返ってきました。続いて、ホスト名と名前解決をONにしてPublicly AccessibleをYESにしてSecurityGroupでポートを開けたインスタンスを試してみます。
$ nslookup > mydb2.azjhhogeqtzieo.ap-northeast-1.rds.amazonaws.com Server: 192.168.0.3 Address: 192.168.0.3#53 Non-authoritative answer: mydb2.azjhhogeqtzieo.ap-northeast-1.rds.amazonaws.com canonical name = ec2-54-249-85-XXX.ap-northeast-1.compute.amazonaws.com. Name: ec2-54-249-85-XXX.ap-northeast-1.compute.amazonaws.com Address: 54.249.85.XXX
お、EC2のパブリックなホスト名とグローバルなIPアドレスが返ってきました!!
まとめ
いちおう、RDSインスタンスに直接アクセスできることが分かりましたので、データベースのメンテナンスしやすくなりますね。ただし、ぱっと見た感じでPublicly Accessibleの設定を変更できないようですので、ルーティングテーブルやセキュリティグループでしっかりガートしてください。せっかくのVPCのセキュアな環境が台無しになってしまいます。私のオススメは踏み台サーバからのプロキシなのですが、無駄なインスタンスを起動してしまいますので、こんなやり方もあるよーってことで抑えておいてもらえればなと思います。